package com.atguigu.boot.admin.config;

import com.atguigu.boot.admin.interceptor.LoginInterceptor;
import com.atguigu.boot.admin.interceptor.RedisUrlCountInterceptor;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.servlet.config.annotation.InterceptorRegistry;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;

/**
 *  1.编写一个拦截器实现HandlerInterceptor接口
 *  2.拦截器注册到容器中(实现WebMvcConfigurer的addInterceptors方法)
 *  3.指定拦截规则【如果是拦截所有，静态资源也会被拦截】
 *
 *  @EnableWebMvc：
 *      全面接管
 *          1.静态资源？视图解析器？欢迎页。。。全部失效
 *
 * @author : leimingchao
 * @date Date : 2021年11月20日 8:47
 */
// @EnableWebMvc
@Configuration
public class AdminWebConfig implements WebMvcConfigurer {

    /**
     * Filter、Interceptor几乎拥有相同的功能？
     * 1.Filter是Servlet定义的原生组件。好处：脱离Spring应用也能使用
     * 2.Interceptor是Spring定义的接口。可以使用Spring的自动装配等功能
     *
     */
    // @Autowired
    private RedisUrlCountInterceptor redisUrlCountInterceptor;

    /**
     * 定义静态资源行为
     * @param registry
     */
    // @Override
    // public void addResourceHandlers(ResourceHandlerRegistry registry) {
    //     //访问aa路径下的所有请求都去classpath:/static/ 下面进行匹配
    //     registry.addResourceHandler("/aa/**")
    //             //资源路径
    //             .addResourceLocations("classpath:/static/");
    // }

    @Override
    public void addInterceptors(InterceptorRegistry registry) {
        registry.addInterceptor(new LoginInterceptor())
                //所有请求都被拦截包括静态资源
                .addPathPatterns("/**")
                //放行的请求
                .excludePathPatterns("/","/login","/css/**","/fonts/**","/images/**","/js/**","/aa/**");
        // registry.addInterceptor(redisUrlCountInterceptor)
        //         .addPathPatterns("/**")
        //         .excludePathPatterns("/","/login","/css/**","/fonts/**","/images/**","/js/**","/aa/**");
    }

    //不推荐使用，没有掌握SpringMVC的HandlerMapping原理，不推荐使用
    // @Bean
    // public WebMvcRegistrations webMvcRegistrations() {
    //     return new WebMvcRegistrations() {
    //         @Override
    //         public RequestMappingHandlerMapping getRequestMappingHandlerMapping() {
    //             return null;
    //         }
    //     };
    // }


}
